export class DocumentSearcher {
  private baseUrl = 'https://ant.design';

  async getComponentDocs(
    component: string,
    version?: string,
    language: 'zh' | 'en' = 'zh'
  ): Promise<string> {
    try {
      // 构建文档URL
      const docUrl = this.buildDocUrl(component, version, language);
      
      // 返回组件文档信息（简化版本，实际应该从API或爬取获取）
      return this.getStaticDocs(component, language);
    } catch (error) {
      throw new Error(`Failed to fetch documentation for ${component}: ${error}`);
    }
  }

  private buildDocUrl(component: string, version?: string, language: 'zh' | 'en' = 'zh'): string {
    const langPath = language === 'zh' ? '/components' : '/components';
    const versionPath = version ? `/${version}` : '';
    return `${this.baseUrl}${versionPath}${langPath}/${component.toLowerCase()}`;
  }

  private getStaticDocs(component: string, language: 'zh' | 'en'): string {
    const docs: Record<string, Record<string, string>> = {
      'Button': {
        'zh': `# Button 按钮

按钮用于开始一个即时操作。

## 何时使用

标记了一个（或封装一组）操作命令，响应用户点击行为，触发相应的业务逻辑。

在 Ant Design 中我们提供了五种按钮。

- 主按钮：用于主行动点，一个操作区域只能有一个主按钮。
- 默认按钮：用于没有主次之分的一组行动点。
- 虚线按钮：常用于添加操作。
- 文本按钮：用于最次级的行动点。
- 链接按钮：一般用于链接，即导航的作用。

## API

通过设置 Button 的属性来产生不同的按钮样式，推荐顺序为：type -> shape -> size -> loading -> disabled。

按钮的属性说明如下：

| 属性 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| disabled | 按钮失效状态 | boolean | false |
| ghost | 幽灵属性，使按钮背景透明 | boolean | false |
| href | 点击跳转的地址，指定此属性 button 的行为和 a 链接一致 | string | - |
| htmlType | 设置 button 原生的 type 值 | submit \\| button \\| reset | button |
| icon | 设置按钮的图标组件 | ReactNode | - |
| loading | 设置按钮载入状态 | boolean \\| { delay: number } | false |
| shape | 设置按钮形状 | default \\| circle \\| round | default |
| size | 设置按钮大小 | large \\| middle \\| small | middle |
| target | 相当于 a 链接的 target 属性，href 存在时生效 | string | - |
| type | 设置按钮类型 | primary \\| ghost \\| dashed \\| link \\| text \\| default | default |
| onClick | 点击按钮时的回调 | (event: MouseEvent) => void | - |`,
        'en': `# Button

To trigger an operation.

## When To Use

A button means an operation (or a series of operations). Clicking a button will trigger corresponding business logic.

In Ant Design we provide 5 types of button.

- Primary button: indicate the main action, one primary button at most in one section.
- Default button: indicate a series of actions without priority.
- Dashed button: used for adding action commonly.
- Text button: used for the most secondary action.
- Link button: used for external links.

## API

To get a customized button, just set \`type\`/\`shape\`/\`size\`/\`loading\`/\`disabled\`.

| Property | Description | Type | Default |
| --- | --- | --- | --- |
| disabled | Disabled state of button | boolean | false |
| ghost | Make background transparent and invert text and border colors | boolean | false |
| href | Redirect url of link button | string | - |
| htmlType | Set the original html type of button | submit \\| button \\| reset | button |
| icon | Set the icon component of button | ReactNode | - |
| loading | Set the loading status of button | boolean \\| { delay: number } | false |
| shape | Can be set button shape | default \\| circle \\| round | default |
| size | Set the size of button | large \\| middle \\| small | middle |
| target | Same as target attribute of a, works when href is specified | string | - |
| type | Set button type | primary \\| ghost \\| dashed \\| link \\| text \\| default | default |
| onClick | Set the handler to handle click event | (event: MouseEvent) => void | - |`
      },
      'Table': {
        'zh': `# Table 表格

展示行列数据。

## 何时使用

- 当有大量结构化的数据需要展现时；
- 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。

## API

### Table

| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| bordered | 是否展示外边框和列边框 | boolean | false |
| columns | 表格列的配置描述 | ColumnsType[] | - |
| dataSource | 数据数组 | object[] | - |
| loading | 页面是否加载中 | boolean \\| Spin props | false |
| locale | 默认文案设置，目前包括排序、过滤、空数据文案 | object | - |
| pagination | 分页器，参考配置项或 pagination 文档 | object \\| false | - |
| rowKey | 表格行 key 的取值，可以是字符串或一个函数 | string \\| function(record): string | 'key' |
| rowSelection | 表格行是否可选择 | object | - |
| scroll | 表格是否可滚动，也可以指定滚动区域的宽、高 | object | - |
| showHeader | 是否显示表头 | boolean | true |
| size | 表格大小 | default \\| middle \\| small | default |`,
        'en': `# Table

A table displays rows of data.

## When To Use

- To display a collection of structured data.
- To sort, search, paginate, filter data.

## API

### Table

| Property | Description | Type | Default |
| --- | --- | --- | --- |
| bordered | Whether to show all table borders | boolean | false |
| columns | Columns of table | ColumnsType[] | - |
| dataSource | Data record array to be displayed | object[] | - |
| loading | Loading status of table | boolean \\| Spin props | false |
| locale | The i18n text including filter, sort, empty text, etc | object | - |
| pagination | Config of pagination | object \\| false | - |
| rowKey | Row's unique key, could be a string or function that returns a string | string \\| function(record): string | 'key' |
| rowSelection | Row selection config | object | - |
| scroll | Whether table can be scrolled in x/y direction | object | - |
| showHeader | Whether to show table header | boolean | true |
| size | Size of table | default \\| middle \\| small | default |`
      }
    };

    return docs[component]?.[language] || `暂无 ${component} 组件的文档信息。`;
  }

  async searchDocs(query: string, limit = 5): Promise<string[]> {
    // 模拟文档搜索
    const allComponents = ['Button', 'Table', 'Form', 'Input', 'Select', 'DatePicker', 'Upload', 'Modal'];
    
    return allComponents
      .filter(comp => comp.toLowerCase().includes(query.toLowerCase()))
      .slice(0, limit);
  }

  async getProComponentDocs(component: string): Promise<string> {
    const proDocs: Record<string, string> = {
      'ProTable': `# ProTable 高级表格

🏆 集成了查询表单，具有查询，刷新等好用的功能。

## 何时使用

当你需要快速实现一个查询表格时，ProTable 可以满足你的所有需求。

## API

ProTable 在 antd Table 的基础上增加了一些实用的功能，所以支持 antd Table 的所有API。

| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| request | 获取 dataSource 的方法 | (params?: any) => Promise | - |
| columns | 表格列的配置，支持更多配置 | ProColumns[] | - |
| toolBarRender | 工具栏渲染 | (action) => ReactNode[] | - |
| search | 是否显示搜索表单，传入对象时为搜索表单的配置 | false \\| SearchConfig | true |
| dateFormatter | 转化 moment 格式数据为特定类型，false 不做转化 | "string" \\| "number" \\| false | string |`,
      
      'ProForm': `# ProForm 高级表单

🏆 高性能的表单控件，自带数据绑定+校验。

## 何时使用

当你需要快速实现一个表单时，ProForm 可以满足你的需求。

## API

| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| onFinish | 提交表单且数据验证成功后回调事件 | (values: T) => Promise\\|void | - |
| onFinishFailed | 提交表单且数据验证失败后回调事件 | (errorInfo: ValidateErrorEntity) => void | - |
| submitter | 提交按钮相关配置 | SubmitterProps \\| false | true |`
    };

    return proDocs[component] || `暂无 ${component} Pro 组件的文档信息。`;
  }

  async getChartsDocs(component: string): Promise<string> {
    const chartsDocs: Record<string, string> = {
      'Line': `# Line 折线图

折线图用于展示数据在连续时间间隔或有序类别间的变化趋势。

## 何时使用

- 展示数据随时间变化的趋势
- 对比多组数据的变化趋势

## API

| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| data | 设置图表数据源 | array | - |
| xField | x 轴字段名 | string | - |
| yField | y 轴字段名 | string | - |
| seriesField | 分组字段名 | string | - |
| color | 指定点的颜色 | string \\| string[] \\| Function | - |
| point | 折线数据点图形样式 | PointOptions | - |`,
      
      'Column': `# Column 柱状图

柱状图通过柱形的高度来表现数据的大小。

## 何时使用

- 对比不同类别的数据大小
- 展示数据的分布情况

## API

| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| data | 设置图表数据源 | array | - |
| xField | x 轴字段名 | string | - |
| yField | y 轴字段名 | string | - |
| seriesField | 分组字段名 | string | - |
| color | 指定点的颜色 | string \\| string[] \\| Function | - |`
    };

    return chartsDocs[component] || `暂无 ${component} 图表组件的文档信息。`;
  }
}